package com.joseph.websocket.handler;

import com.joseph.websocket.bean.SessionUser;
import com.joseph.websocket.component.SessionManager;
import com.joseph.websocket.util.AttrUtil;
import com.joseph.websocket.util.ParserUtil;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;
import io.netty.handler.codec.MessageToMessageDecoder;
import io.netty.handler.codec.http.*;
import io.netty.util.CharsetUtil;
import lombok.extern.log4j.Log4j2;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.List;

import static io.netty.handler.codec.http.HttpUtil.setContentLength;

/**
 * 建立WS连接前用户身份验证
 */
@ChannelHandler.Sharable
@Log4j2
public class UserAuthHandler extends MessageToMessageDecoder<FullHttpRequest> {

    @Override
    protected void decode(ChannelHandlerContext ctx, FullHttpRequest msg, List<Object> out) {
        String uri = msg.uri();
        String userId = (String) ParserUtil.getParameter(uri).get("userId");
        if (StringUtils.isEmpty(userId)) {
            ctx.channel().close();
            return;
        }
        SessionUser user = new SessionUser();
        ctx.channel().attr(AttrUtil.USER_ID).set(userId);
        user.setUserId(userId);
        user.setContext(ctx);
        user.setDevice("IOS");
        SessionManager.addUser(user);
        //去掉参数，重置URL，传递给WS握手
        msg.setUri(msg.uri().substring(0, msg.uri().indexOf("?")));
        out.add(msg.retain());
    }

    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        log.info("user auth check close");
    }
}
